<?php namespace system\model;
use houdunwang\model\Model;
class Category extends Model
{
    //数据表
    protected $table = "category";
    //允许填充字段
    protected $allowFill = ['*'];
    //自动验证
    protected $validate = [
        //['字段名','验证方法','提示信息',验证条件,验证时间]
        ["cname",'isnull','分类名称不能为空',self::MUST_VALIDATE,self::MODEL_BOTH],
        //["pid",'isnull','顶级分类不能为空',self::MUST_VALIDATE,self::MODEL_BOTH],这个是一定不可能为空，故不必验证
        ["ctitle",'isnull','分类标题不能为空',self::MUST_VALIDATE,self::MODEL_BOTH],
        ["cdes",'isnull','分类描述不能为空',self::MUST_VALIDATE,self::MODEL_BOTH],
        ["ckeywords",'isnull','分类关键字不能为空',self::MUST_VALIDATE,self::MODEL_BOTH],
        ["csort",'isnull','分类排序不能为空',self::MUST_VALIDATE,self::MODEL_BOTH],

    ];
    //添加顶级分类
    public function store(){
        //save自动触发自动验证，执行成功的时候，返回自增主键，form表单name必须和数据库字段保持一致
        return $res = $this->save($_POST);
    }

    public function getcateData($cid){
        //1 获取当前数据的子集
        $data = Db::table('category')->get();//获取category所有数据
        //p($data);
        $sons = $this->getSon($data,$cid);//$cid为编辑的是第$cid条数据
        //var_dump($sons);
        //2 将子集也追加进去
        $sons[]=$cid;
        //$this代表category这张表，cid这个字段不在$son中的所有cid的值
        $data = $this->whereNotIn('cid',$sons)->get()->toArray();
        return Arr::tree($data,'cname');
    }
    //获取$cid所有子集的cid，如果子集中还有子集，则子子孙孙全部获取
    public function getSon($data,$cid){
        static $temp = [];
        foreach ($data as $k=>$v){
            if($v['pid']==$cid){
                $temp[]=$v['cid'];//追加，而不是$temp=$v['cid'],才能获得所有子类cid
                $this->getSon($data,$v['cid']);
            }
        }
        return $temp;
    }
    public function edit(){
        //方式一
        /*$data = [
			'cname'=>$_POST['cname'],
			'ctitle'=>$_POST['ctitle'],
			'cdes'=>$_POST['cdes'],
			'ckeywords'=>$_POST['ckeywords'],
			'csort'=>$_POST['csort'],
			'pid'=>$_POST['pid']
		];
		$res = $this->where('cid', '=', $_POST['cid'])->update($data);*/

        //方式二
        //因为是更新数据，所以按照添加的那种方法，只写$this->save();是添加数据，而不是更新数据了,find是MODEL的一个方法
        $model = $this->find($_POST['cid']);//找category表中的$_POST['cid']这条数据
        //p($model);
        $model->cname=$_POST['cname'];
        $model->cdes=$_POST['cdes'];
        $model->ctitle=$_POST['ctitle'];
        $model->ckeywords=$_POST['ckeywords'];
        $model->csort=$_POST['csort'];
        $model->cid=$_POST['cid'];
        $model->pid=$_POST['pid'];
        return $model->save();
    }


    public function delData($cid){
        //从表中找到要删除的数据cid，返回值是一个对象
        $model = $this::find($cid);
        //获取所有数据库数据
        $data = Db::table('category')->get();
        //如果有子集，则不允许删除
        foreach($data as $k=>$v){
            if($v['pid']==$cid){
                message('请先删除子集',u('index'),'success',2);die;
            }
        }
        //执行删除-模型动作
        return $model->destory();
    }
}


























